/**
 * 请求参数错误 400
 * 数据不存在 404
 * 服务器错误 500
 */

/**
 * 自定义404错误
 */
class NotFoundError extends Error {
  constructor(message) {
    this.name = "NotFoundError";
  }
}

/**
 * 成功的响应
 * @param {*} res
 * @param {string} message
 * @param {Object} data
 * @param {number} code
 */
function success(res, message = "success", data = null, code = 200) {
  res.status(code).json({
    status: true,
    code,
    message,
    data,
  });
}

/**
 * 错误的响应
 * @param {*} res
 * @param {*} error
 * @returns
 */
function failure(res, error) {
  if (error.name === "SequelizeValidationError") {
    const errors = error.errors.map((e) => e.message);
    return res.status(400).json({
      status: false,
      message: "请求参数错误",
      code: 400,
      errors,
    });
  }

  if (error.name === "NotFoundError") {
    return res.status(404).json({
      status: false,
      code: 404,
      message: "资源不存在",
      errors: [error.message],
    });
  }

  return res.status(500).json({
    status: false,
    code: 500,
    message: "服务器错误",
    errors: [error.message],
  });
}

module.exports = {
  NotFoundError,
  success,
  failure,
};
